R

トップページ
Google
WWWを検索
サイト内を検索

他のプログラミング言語を経験してからRをいじりだした人に多いと思うのですが、便利関数で簡潔に実現できる処理を、ループ処理で複雑に書いて、苦労した上に見通しとパフォーマンスが悪いコードを生成することがあります。

1 正規表現

Rでも正規表現によるテキスト処理ができます。

txt <- c("This is a pen.", "This is an apple.")
# isが含まれる要素の位置
grep("[^a-z]is[^a-z]", txt) 
[1] 1 2
# appleが含まれる要素
grep("apple", txt, value = TRUE) 
[1] "This is an apple."
# appleが含まれない要素
grep("apple", txt, value = TRUE, invert = TRUE) 
[1] "This is a pen."
# isをwasに置換(1要素に複数あってもすべて置換)
gsub("([^a-z])(is)([^a-z])", "\\1was\\3", txt)
[1] "This was a pen."    "This was an apple."
# 空白で分割
strsplit(txt, " ")
[[1]]
[1] "This" "is"   "a"    "pen."

[[2]]
[1] "This"   "is"     "an"     "apple."

置換時の括弧の中の文字列は\\1といったエスケープ文字と数字の組み合わせで表現されることに注意しましょう。 なお、括弧自体をマッチングしたい場合は、

gsub("\\(", "括弧始", "(...)")
[1] "括弧始...)"

と言うように括弧の前にエスケープ文字をつけます。

2 mCn

組み合わせの数の計算ができるchoose関数があります。コンビネーションではないので注意しましょう。

# 5!/(3!2!)
choose(5, 3)
[1] 10
# factorialで書くと長々として遅い
factorial(5)/(factorial(3)*factorial(2))
[1] 10

3 対話モードで動いているか調べる

interactive()TRUEが戻って来た場合は対話モードで動いています。バッチ処理と対話モードで挙動を変えたいときに使えます。

4 sweep

行列の要素を行や列ごとに足したり引いたりする関数です。applyで間に合うので使う機会は乏しいのですが、たまに使われているのを見かけます。

5 GUIのファイル・ダイアログを使う

使いどころは乏しい気もしますが、file.choose()でできます。

file.edit(file.choose())

とすれば、ファイルを指定してエディターで編集できます。